<?php
/**
 * <i>@var</i>组件
 * 
 * 定义新的模板变量
 * 
 * 可以使用的参数有：
 * - x-name    string 变量的名称
 * - [x-value] string 变量的值
 * 
 * 实例:
 *  模板：
 *  <code>
 *   <span com="@var" x-name="$title" x-value="site title!"/>
 *   <span com="@var" x-name="$title2">site site!</span>
 *   <span com="@var" x-name="$title3">$title</span>
 *  </code>
 *
 * @version $Id: IMintVarComponent.php 312 2008-04-23 16:29:38Z iwind $
 * @package util.mint.component
 * @since 0.0.3
 */
class IMintVarComponent extends IAbstractMintComponent {
	/**
	 * 取得支持的参数列表
	 *
	 * @return array
	 * @since 0.0.3
	 */	
	public function getSupportedParameters() {
		return array("x-name", "x-value");
	}
	
	/**
	 * 取得HTML属性映射
	 *
	 * @return array
	 * @since 0.0.3
	 */		
	public function getHtmlAttrMapping() {
		return array();
	}	
	
	/**
	 * 处理组件
	 *
	 * @return boolean
	 * @since 0.0.3
	 */	
	public function processComponent() {
		$parameters = $this->getParameters();
		
		if (!isset($parameters["x-name"])) {
			return false;
		}
		
		//x-name
		$xName = IMintVariable::getDefinition($parameters["x-name"]);
		if ($xName == null) {
			$this->throwVariableException("x-name");
		}
		
		if (!isset($parameters["x-value"])) {
			$xValue = $this->getNode()->nodeValue;
		}
		else {
			$xValue = $parameters["x-value"];
		}
		
		foreach (IMintConfig::$variableMarkArray as $mark) {
			$mark = preg_quote($mark, "/");
			$xValue = preg_replace("/({$mark})([a-z_]\\w*)/i", "{\$TDataSet->\\2}", $xValue);
			$xValue = preg_replace("/({$mark})\\{([a-z_]\\w*)\\}/i", "{\$TDataSet->\\2}", $xValue);
		}
		
		$php = "<?php {$xName}=\"" . addslashes($xValue) . "\"; ?>\n";
		$this->replaceNodeText($php);
		$this->removeNode();
		
		return true;
	}
}

?>